Skip to content

fix(responses): forward usage as input_tokens on response.completed - #2082

Closed
tungloong wants to merge 1 commit into
decolua:masterfrom
tungloong:codex/fix-responses-transformer-usage
Closed

tungloong wants to merge 1 commit into
decolua:masterfrom
tungloong:codex/fix-responses-transformer-usage

Conversation

@tungloong

Copy link
Copy Markdown
Contributor

Summary

Codex Desktop reads response.completed.response.usage to show the context window usage indicator. When /v1/responses routes through a chat-completions upstream (e.g. MiniMax), the openai-responses translator synthesized response.completed without a usage field, and even after adding usage it emitted Chat Completions field names (prompt_tokens) that Codex cannot parse (missing field input_tokens).

This PR maps upstream usage to the Responses API shape in sendCompleted.

Changes

  • Add toResponsesUsage() in open-sse/translator/concerns/usage.js — converts prompt_tokens / completion_tokens → input_tokens / output_tokens, preserves cached_tokens in input_tokens_details
  • Attach converted usage on response.completed in openai-responses.js sendCompleted
  • Add unit tests for the converter and translator path

Runtime path

/v1/responses → handleChat → handleChatCore → stream.js (extractUsage) → openai-responses translator (sendCompleted). Does not go through responsesTransformer.js (handleResponsesCore is unused).

Test plan

  • npm run build && npm run start — Codex Desktop shows context usage
  • response.completed carries input_tokens / output_tokens (no parse error)

/v1/responses goes through stream.js → openai-responses translator.
Map state.usage to Responses API shape in sendCompleted so Codex Desktop
can parse response.completed.response.usage.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant